﻿using System;
using System.Collections.Generic;

namespace CRM.Database.Model
{
    public partial class Turnovers : IGetKeyValue, ISetChangedUser
    {
        #region Implementation of IGetKeyValue

        /// <summary>
        /// Получение ключего значения элемента
        /// </summary>
        /// <returns>Ключевое значение</returns>
        public int GetKeyValue()
        {
            return IdTurnover;
        }

        #endregion

        #region Implementation of ISetChangedUser

        /// <summary>
        /// Установка пользователя, который сделал изменение
        /// </summary>
        /// <param name="userLogin">Логин пользователя</param>
        public void SetChangedUser(string userLogin)
        {
            if (string.IsNullOrEmpty(userLogin))
                throw new Exception("Логин пользователя не должен быть пустым!");
            IdUser = userLogin;
        }

        #endregion

        protected string _managerName;

        /// <summary>
        /// Классификация оборота по-русски
        /// </summary>
        private string _turnoverClassificationNameRu;

        /// <summary>
        /// Клиентский номер
        /// </summary>
        public int ClientSequentalNumber
        {
            get { return LegalEntities.SequentialNumber; }
        }

        /// <summary>
        /// Месяц оборота
        /// </summary>
        public int Month
        {
            get { return Period.Month; }
        }

        /// <summary>
        /// Год оборота
        /// </summary>
        public int Year
        {
            get { return Period.Year; }
        }


        /// <summary>
        /// регион профайн клиента
        /// </summary>
        public string CustomerProfineRegion
        {
            get { return LegalEntities.ProfineRegionNameLocalized; }
        }


        public int IdProfineRegionLegalEntity
        {
            get
            {
                if (LegalEntities != null)
                    return LegalEntities.IdProfineRegion;
                return 0;
            }
        }

        /// <summary>
        /// Идентификатор региона профайн
        /// </summary>
        //   private int _idProfineRegion;
        //public EuroMoney EuroAmount
        //{
        //    get
        //    {
        //        return new EuroMoney(Amount);
        //    }
        //}
        ///// <summary>
        ///// Идентификатор региона профайн
        ///// </summary>
        //public int IdProfineRegion
        //{
        //    get
        //    {
        //        if(_idProfineRegion==0)
        //        {
        //            if (LegalEntities.Customers.IdprofineRegion != null)
        //                _idProfineRegion = (int) LegalEntities.Customers.IdprofineRegion;
        //        }
        //        return _idProfineRegion;
        //    }
        //    set { _idProfineRegion = value; }
        //}
        //public int IdProfineRegionLegalEntity
        //{
        //    get
        //    {
        //        if (LegalEntities != null)
        //            return LegalEntities.IdProfineRegion;
        //        return 0;
        //    }
        //}
        /// <summary>
        /// Название юридического лица
        /// </summary>
        public string LegalEntityName
        {
            get
            {
                if (LegalEntities != null) return LegalEntities.Name;
                return "";
            }
        }


        /// <summary>
        /// Артикул
        /// </summary>
        public string ArticleText
        {
            get
            {
                if (Products != null)
                {
                    return Products.ArticleLong;
                }
                return "";
            }
        }


        /// <summary>
        /// Система продукта
        /// </summary>
        public ProductSystems ProductSystem
        {
            get
            {
                if (Products != null)
                    return Products.ProductSystems;
                return null;
            }
        }


        /// <summary>
        /// Название системы
        /// </summary>
        public string ProductSystemName
        {
            get
            {
                if (ProductSystem != null)
                    return ProductSystem.ProductSystemRu;
                return "";
            }
        }


        /// <summary>
        /// Название марки продукта
        /// </summary>
        public string ProductMarkName
        {
            get
            {
                if (ProductMark != null)
                {
                    return ProductMark.ProductMark;
                }
                return "";
            }
        }


        /// <summary>
        /// Марка продукта
        /// </summary>
        public ProductMarks ProductMark
        {
            get
            {
                if (ProductSystem != null)
                {
                    return ProductSystem.ProductMarks;
                }
                if (IdProductMark != null)
                {
                    var col = new ProductMarksCollection();
                    return col.GetItemById((int) IdProductMark) as ProductMarks;
                }
                return null;
            }
        }

        /// <summary>
        /// Название клиента
        /// </summary>
        public string CustomerName
        {
            get
            {
                if (LegalEntities != null)
                    return LegalEntities.CustomerName;
                return "";
            }
        }


        /// <summary>
        /// Город юр. лица
        /// </summary>
        public string Cities
        {
            get
            {
                if (LegalEntities != null)
                    return LegalEntities.CitiesStr;
                return "";
            }
        }

        /// <summary>
        /// Название дилера
        /// </summary>
        public string DealerLegalName
        {
            get
            {
                if (DealerLegalEntity != null) return DealerLegalEntity.Name;
                return "Производство";
            }
        }


        /// <summary>
        /// Название дилера
        /// </summary>
        public string DealerName
        {
            get
            {
                if (Dealer != null)
                {
                    return Dealer.Name;
                }
                return "Производство";
            }
        }


        /// <summary>
        /// Название региона профайн
        /// </summary>
        public string DealerProfineRegionName
        {
            get
            {
                if (DealerLegalEntity != null)
                    return DealerLegalEntity.ProfineRegionNameLocalized;
                return "";
            }
        }


        /// <summary>
        /// Дилер
        /// </summary>
        public Customers Dealer
        {
            get
            {
                if (DealerLegalEntity != null)
                    return DealerLegalEntity.Customers;
                return null;
            }
        }

        /// <summary>
        /// Город дилера
        /// </summary>
        public string DealerCity
        {
            get
            {
                if (DealerLegalEntity != null) return DealerLegalEntity.CitiesStr;
                return "";
            }
        }


        /// <summary>
        /// Город клиента
        /// </summary>
        public string CustomerCity
        {
            get { return LegalEntities.PrimaryCity; }
        }


        /// <summary>
        /// Область клиента
        /// </summary>
        public string CustomerRegion
        {
            get
            {
                if (LegalEntities.PrimaryAddress != null)
                    if (LegalEntities.PrimaryAddress.Settlements != null)
                        return LegalEntities != null ? LegalEntities.PrimaryAddress.Settlements.RegionName : null;
                return LegalEntities.Customers.ProfineRegionNameLocalized;
                return "";
            }
        }


        /// <summary>
        /// Менеджер
        /// </summary>
        public string ManagerName
        {
            get
            {
                if (string.IsNullOrEmpty(_managerName))
                {
                    if (LegalEntities != null)
                        if (LegalEntities.Customers != null) _managerName = LegalEntities.Customers.Manager;
                        else _managerName = "-";
                    else _managerName = "-";
                }
                return _managerName;
            }
        }

        /// <summary>
        /// Классификация оборота по-русски
        /// </summary>
        public string TurnoverClassificationNameRu
        {
            get
            {
                var col = new TurnoverClassificationsCollection();

                if (IdTurnoverClassification != null)
                {
                    var obj = (TurnoverClassifications) col.GetItemById((int) IdTurnoverClassification);
                    return obj.TurnoverClassificationRu;
                }

                return "-";
            }
        }


        /// <summary>
        /// Идентификатор региона профайн
        /// </summary>
        public int IdProfineRegion
        {
            get { return LegalEntities.IdProfineRegion; }
        }

        #region Insert turnovers extended properties

        private List<string> _errors;

        /// <summary>
        /// Номер строки оборота в Excel 
        /// </summary>
        public int StringNumber { get; set; }

        /// <summary>
        /// списко ошибок
        /// </summary>
        public List<string> Errors
        {
            get
            {
                if (_errors == null)
                    _errors = new List<string>();
                return _errors;
            }
        }

        /// <summary>
        /// Маркер для пропуска оборота (не нужно загружать в базу)
        /// </summary>
        public bool Miss { get; set; }

        #endregion

        //public string TurnoverClassificationNameLocalized
        //{
        //    get
        //    {

        //    }
        //}
    }
}